第零章 NVM 和 NPM

NVM

NVM 全称:Node Version Manager,Node.js 的版本管理工具。虽然 Node.js 可以通过官网直接下载安装,但如果想便于后期管理维护,通过这个工具安装才是最优解。

nvm 与 n 的区别

如果你是直接去 node 官网下载安装的 node,会发现一个名字为 n 的包。因为以下原因,所以不推荐在官网下载安装 node 和使用 n 命令。如果你已经通过官网安装过 node,就得删除掉重新安装。

node 版本管理工具还有一个是 TJ 大神的 n 命令,n 命令是作为一个 node 的模块而存在,而 nvm 是一个独立于 node/npm 的外部 shell 脚本,因此 n 命令相比 nvm 更加局限。由于 npm 安装的模块路径均为 /usr/local/lib/node_modules,当使用 n 切换不同的 node 版本时,实际上会共用全局的 node/npm 目录。因此不能很好的满足『按不同 node 版本使用不同全局 node 模块』的需求。同时 n 命令也无法管理它本身依赖的 node 版本。

安装 nvm 及其更新

虽然大部分博客推荐使用 Homebrew 安装,但我不推荐,原因如下:

lease note that upstream has asked us to make explicit managing nvm via Homebrew is unsupported by them and you should check any problems against the standard nvm install method prior to reporting.

建议直接使用 官方脚本open in new window 安装,省心高效,更新也是使用这个脚本。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

如果是 Mac 安装报错,很可能是没安装 X-Code 工具,可以运行以下代码安装。

xcode-select --install

NVM 常用命令

nvm ls-remote #查看远程所有 Node 版本
nvm ls-remote --lts #查看远程所有 LTS 版本 Node

nvm install 4.2.2 #安装4.2.2版本
nvm install 4.2 #遵守语义化版本命名规则,安装 4.2.x 系列的最新的一个版本
nvm install --lts #安装最新 LTS 版本 Node

nvm uninstall 4.2.2 #删除特定版本,提前清空特定版本的全局模块,否则会报错。

nvm list #查看本地 Node 版本列表
nvm current #查看当前使用 Node 版本
nvm which 4.2.2 #确认某个版本Node的路径

nvm use 4.2.2 #切换到指定版本
nvm alias default 4.2.2 #指定全局默认版本

nvm run 4.2.2 --version #直接运行特定版本的 Node

NPM

NPM 是随同 NodeJS 一起安装的包管理工具,由于新版的 nodejs 已经集成了 npm,所以之前 npm 也一并安装好了。同样可以通过输入 npm -v 来测试是否成功安装。

版本号

使用 NPM 下载和发布代码时都会接触到版本号。NPM 使用语义版本号来管理代码,这里简单介绍一下。

语义版本号分为 X.Y.Z 三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。

  • 如果只是修复 bug,需要更新 Z 位。
  • 如果是新增了功能,但是向下兼容,需要更新 Y 位。
  • 如果有大变动,向下不兼容,需要更新 X 位。

版本号有了这个保证后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。例如"argv": "0.0.x"表示依赖于 0.0.x 系列的最新版 argv。

NPM 常用命令

命令添加 -g 命令则为全局模块

sudo npm install npm -g #更新npm

npm install <Module Name> #安装模块
npm uninstall <Module Name> #卸载模块
npm update <Module Name> #更新模块
npm search <Module Name> #搜索模块

npm list #查看所有模块
npm list <Module Name> #查看某个模块的版本号

npm init #创建模块
npm publish #发布模块
npm unpublish <package>@<version> #可以撤销发布自己发布过的某个版本代码。

npm cache clear #可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。

Package.json 属性说明

  • name - 包名。
  • version - 包的版本号。
  • description - 包的描述。
  • homepage - 包的官网 url。
  • author - 包的作者姓名。
  • contributors - 包的其他贡献者姓名。
  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
  • main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
  • keywords - 关键字